package com.example.tools.Result;

/**
 * @author czx
 * @ClassName: ResultStatus
 * @Description: 响应状态码枚举类型
 * @date 2022/1/28
 */
public enum ResultStatus {

    /** 基础状态码 **/

    FAILED(100, "响应失败"),

    SUCCESS(200, "响应成功"),

    /** http状态码 **/

    UNAUTHORIZED(401, "身份认证"),

    PERMISSION_DENIED(403, "权限拒绝"),

    TOO_MANY_REQUESTS(429, "请求太频繁"),

    SERVICE_DEGRADATION(444, "服务降级"),

    SERVICE_UNAVAILABLE(503, "服务不可达"),

    /** 自定义状态码 **/

    UNKNOWN_ERROR(1000, "未知错误"),

    PARAM_ERROR(1001, "参数错误"),

    DATA_ERROR(1002, "数据不存在"),

    TYPE_ERROR(1003, "类型不支持"),

    STATUS_ERROR(1004, "状态错误"),

    LIMIT_ERROR(1005, "限制错误"),

    /** 业务状态码 **/

    DEBUG_ERROR(2001, "调试错误"),

    ;
    /**
     * 状态码
     */
    private int status;
    /**
     * 描述信息
     */
    private String desc;

    /**
     * 创建一个新的实例 ResultStatus.
     *
     * @param status
     * @param desc
     */
    private ResultStatus(int status, String desc) {
        this.status = status;
        this.desc = desc;
    }

    /**
     * @Title: getStatus
     * @Description: 获取状态码
     * @param @return    参数
     * @return int    返回类型
     * @throws
     */
    public int getStatus() {
        return status;
    }
    /**
     * @Title: getDesc
     * @Description: 获取描述信息
     * @param @return    参数
     * @return String    返回类型
     * @throws
     */
    public String getDesc() {
        return desc;
    }

    /**
     * @Title: valueOf
     * @Description: TODO(这里用一句话描述这个方法的作用)
     * @param @param code
     * @param @return    参数
     * @return ResultCode    返回类型
     * @throws
     */
    public static ResultStatus valueOf(int status) {
        ResultStatus[] values = values();
        for (ResultStatus resultStatus : values) {
            if(resultStatus.status == status) {
                return resultStatus;
            }
        }
        return null;
    }

    /**
     * @Title: success
     * @Description: TODO(这里用一句话描述这个方法的作用)
     * @param @param code
     * @param @return    参数
     * @return boolean    返回类型
     * @throws
     */
    public static boolean isSuccess(int status) {
        return SUCCESS.status == status;
    }

    /**
     * @Title: isNotSuccess
     * @Description: TODO(这里用一句话描述这个方法的作用)
     * @param @param code
     * @param @return    参数
     * @return boolean    返回类型
     * @throws
     */
    public static boolean isNotSuccess(int status) {
        return SUCCESS.status != status;
    }

}
